package com.zxy.leetcode._00000_00099._00010_00019;

import java.util.HashMap;
import java.util.Map;

/**
 * https://leetcode-cn.com/problems/roman-to-integer/
 * 罗马数字转整数
 *
 * 给定一个罗马数字，将其转换成整数。输入确保在 1 到 3999 的范围内。
 */
public class Test00013 {

    public static void main(String[] args) {
        Test00013 test = new Test00013();
        System.out.println(test.romanToInt("III")); // 3
        System.out.println(test.romanToInt("IV"));  // 4
        System.out.println(test.romanToInt("IX"));  // 9
        System.out.println(test.romanToInt("LVIII"));  // 58
        System.out.println(test.romanToInt("MCMXCIV"));  // 1994
    }

    public int romanToInt(String s) {
        Map<String, Integer> dic = new HashMap<>();
        dic.put("I", 1);
        dic.put("IV", 4);
        dic.put("V", 5);
        dic.put("IX", 9);
        dic.put("X", 10);
        dic.put("XL", 40);
        dic.put("L", 50);
        dic.put("XC", 90);
        dic.put("C", 100);
        dic.put("CD", 400);
        dic.put("D", 500);
        dic.put("CM", 900);
        dic.put("M", 1000);

        int num = 0;
        for (int i=0; i<s.length(); i++) {
            // 先往大的数找
            if (i +1 < s.length()) {
                String str = s.substring(i, i+2);
                Integer n = dic.get(str);
                if (n != null) {
                    num += n;
                    i ++;
                    continue;
                }
            }
            Integer n = dic.get(s.substring(i, i+1));
            num += n;
        }

        return num;
    }

}
